package demo.netty;


import org.springframework.beans.factory.annotation.Value;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;  
  
import com.corundumstudio.socketio.AuthorizationListener;  
import com.corundumstudio.socketio.Configuration;  
import com.corundumstudio.socketio.HandshakeData;  
import com.corundumstudio.socketio.SocketIOServer;  
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;  


@SpringBootApplication
public class NettySocketSpringApplication extends SpringBootServletInitializer{
	
	
	
	@Value("${wss.server.host}")  
    private String host;  
  
    @Value("${wss.server.port}")  
    private Integer port;  
      
    @Bean
    public SocketIOServer socketIOServer()   
    {  
        Configuration config = new Configuration();  
        config.setHostname(host);  
        config.setPort(port);  
          
        //该处可以用来进行身份验证  
        config.setAuthorizationListener(new AuthorizationListener() {  
            public boolean isAuthorized(HandshakeData data) {  
            	System.out.println("aaaaaaaaaaaa");
                //http://localhost:8081?username=test&password=test  
                //例如果使用上面的链接进行connect，可以使用如下代码获取用户密码信息，本文不做身份验证  
//              String username = data.getSingleUrlParam("username");  
//              String password = data.getSingleUrlParam("password");  
                return true;  
            }  
        });  
          
        final SocketIOServer server = new SocketIOServer(config);  
        return server;  
    }  
      
    @Bean  
    public SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketServer) {  
        return new SpringAnnotationScanner(socketServer);  
    }  
      
    public static void main(String[] args) {  
        SpringApplication.run(NettySocketSpringApplication.class, args);  
    }  
    
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(NettySocketSpringApplication.class);
    }

}
